package basic.com.liz.learn.design.singleton;

public class Singleton
{
    
    /* 持有私有静态实例，防止被引用，此处赋值为null，目的是实现延迟加载 */
    private static Singleton instance = null;
    
    /* 私有构造方法，防止被实例化 */
    private Singleton()
    {
    }
    
    /* 此处使用一个内部类来维护单例 */
    private static class SingletonFactory
    {
        private static Singleton instance = new Singleton();
    }
    
    /* 获取实例 */
    public static Singleton getInstance()
    {
        return SingletonFactory.instance;
    }
    
    /* 静态工厂方法[获取实例] */
    public static Singleton getInstance1()
    {
        return single;
    }
    
    /* 饿汉式单例 [类创建的同时就已经创建好一个静态的对象供系统使用，以后不再改变，所以天生是线程安全的。 */
    private static final Singleton single = new Singleton();
    
    /* 如果该对象被用于序列化，可以保证对象在序列化前后保持一致 */
    public Object readResolve()
    {
        return instance;
    }
}